package com.game.view.display
{
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.display.BitmapData;
    
    /**
     * 纹理集
     * @param content bitmapData数据
     * @param region 纹理区域，一个Rectangle，相对于pivot点的区域
     * @param pivot 纹理中心点
     */
    public class Texture
    {
        private var _pivotX:Number = 0;
        private var _pivotY:Number = 0;
        private var _region:Rectangle = new Rectangle();
        private var _content:BitmapData;
        
        public function Texture(bmd:BitmapData = null)
        {
            _content = bmd;
        }
        
        /**
         * 获取空纹理
         * @return 空纹理
         */
        public static function getEmpty():Texture
        {
            return new Texture();
        }
        
        /**
         * 获取纯色纹理
         * @param w 宽度
         * @param h 高度
         * @param color 颜色
         * @return
         */
        public static function getEmptyPureColor(w:Number, h:Number, color:uint):Texture
        {
            var tex:Texture = new Texture();
            tex.content = new BitmapData(w, h, true, color);
            return tex;
        }
        
        /**
         * 设置内容
         * @param bmd
         */
        public function set content(bmd:BitmapData):void
        {
            _content = bmd;
        }
        
        /**
         * 获取内容
         */
        public function get content():BitmapData
        {
            return _content;
        }
        
        /**
         * 获取注册点
         */
        public function get pivot():Point
        {
            return new Point(_pivotX, _pivotY);
        }
        
        /**
         * 设置注册点
         * @param pt
         */
        public function set pivot(pt:Point):void
        {
            _pivotX = pt.x;
            _pivotY = pt.y;
        }
        
        /**
         * 获取注册点X
         */
        public function get pivotX():Number
        {
            return _pivotX;
        }
        
        /**
         * 设置注册点X
         * @param v
         */
        public function set pivotX(v:Number):void
        {
            _pivotX = v;
        }
        
        /**
         * 获取注册点Y
         */
        public function get pivotY():Number
        {
            return _pivotY;
        }
        
        /**
         * 设置注册点Y
         * @param v
         */
        public function set pivotY(v:Number):void
        {
            _pivotY = v;
        }
        
        /**
         * 获取宽度
         */
        public function get width():Number
        {
            return _content.width;
        }
        
        /**
         * 获取高度
         */
        public function get height():Number
        {
            return _content.height;
        }
        
        /**
         * 获取区域（相对于注册点）
         */
        public function get region():Rectangle
        {
            _region.width = _content.width;
            _region.height = _content.height;
            _region.x = _pivotX;
            _region.y = _pivotY;
            return _region.clone();
        }
        
        /**
         * 设置区域
         * @param r Rectangle，只有left,top有效，width和height继承content参数
         */
        public function set region(r:Rectangle):void
        {
            _pivotX = r.left;
            _pivotY = r.top;
        }
        
        /**
         * 浅复制
         * @return Texture
         */
        public function clone():Texture
        {
            return new Texture(_content);
        }
        
        /**
         * 深复制
         * @return Texture
         */
        public function deepClone():Texture
        {
            return new Texture(_content.clone());
        }
        
        /**
         * 是否为空
         * @return Boolean
         */
        public function isEmpty():Boolean
        {
            return _content == null;
        }
        
        /**
         * 释放
         */
        public function dispose():void
        {
            if (content)
            {
                content.dispose();
            }
            _content = null;
        }
    }
}

